import java.util.Scanner;

/**
 * 小红书跳山峰问题
 * 作者:夏天
 * qq:1205232048
 */
public class  Main01{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//输入山峰数
        int k = scanner.nextInt();//输入k值
        int[] H = new int[n];//定义一个山峰高度数组
        for (int i = 0; i < n; i++) {//为山峰高度赋值
            H[i] = scanner.nextInt();
        }
        int money = 0;//记录到达最后一座山峰的最小金币数
        int moneyMin = 0;//记录跳一步得到的最小金币数
        int moneyTemp;//记录跳一步得到的临时最小金币数
        int current = 0;//记录所在的山峰下标
        int currentTemp = 0;//记录所在的山峰临时下标
        if(k == 1){//如果k==1的情况
            for (int i = 0; i < n; i++) {
                if(H[i] < H[i+1]){
                    money += H[i+1] - H[i];
                }
            }
        }else {//如果k>1的情况
            if(k >= n-1){//如果能一步跳完的情况
                money = H[n-1] - H[0];
                if(money <= 0){
                    money = 0;
                }
            }else {//如果不能一步跳完的情况
                while (current != n-1){//判断下标是不是在最后一座山峰, 在就退出, 不在就继续跳
                   int flag = 0;//标志符, 如果为0就表示这一次跳跃之间有比我高的山峰
                    for (int i = 1; i <= k; i++) {//i表示距离当前所在的山峰的距离
                        if((flag == 0) && (H[current] <= H[current+i])){//第一次找到比我高的山
                            flag = 1;
                            moneyMin = H[current+i] - H[current];
                            currentTemp = current + i;
                        }else {
                            if(H[current] <= H[current+i]){//如果比我高
                                moneyTemp = H[current+i] - H[current];
                                if(moneyTemp < moneyMin){
                                    moneyMin = moneyTemp;
                                    currentTemp = current + i;
                                }
                            }else{//如果不比我高
                                currentTemp = current + i;
                                moneyMin = 0;
                            }
                        }
                    }
                    current = currentTemp;//找到最合适的山峰下标赋值给下一步跳到的山峰下标
                    money += moneyMin;//将跳每一步花费的最小金币累加到总最小金币
                    if((current + k) >= (n-1)){//跳完每一步, 再次判断是否能一步跳到最后一座山峰
                        moneyMin = H[n-1] - H[current];
                        current = n-1;
                        if(moneyMin <= 0){
                            moneyMin = 0;
                        }
                        money += moneyMin;
                    }
                }
            }
        }
        System.out.println(money);
    }
}